package com.njts.auto;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Map;

public class AutoCreateBean {
    public Object createBean(HttpServletRequest request, Object object) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        Map<String, String[]> parameterMap = request.getParameterMap();
        Field[] declaredFields = object.getClass().getDeclaredFields(); //反射出对象的属性
        for(Field field : declaredFields){ // 枚举每个属性
            Class<?> type = field.getType();  // 获得属性的类型
            String fieldName=field.getName(); // 得到属性的名称
            String[] valueArray = parameterMap.get(fieldName);
            if(valueArray!=null&&valueArray.length!=0) {
                String values="";
                for(String value : valueArray){
                    values+=value;
                }
                String firstLetter=fieldName.substring(0,1).toUpperCase(); // 属性名首字母大写
                String Letter=fieldName.substring(1); // 提取非首字母的字母
                Method method=null;
                if(!values.equals("")){
                    if(type.getName().equals("java.lang.String")) { //
                        method = object.getClass().getMethod("set" + firstLetter + Letter,String.class); // 反射指定名称的方法
                        method.invoke(object,values); // 执行接口获得其值
                    }else if(type.toString().equals("int")){
                        method = object.getClass().getMethod("set" + firstLetter + Letter,int.class); // 反射指定名称的方法
                        method.invoke(object,Integer.parseInt(values)); // 执行接口获得其值
                    }else if(type.toString().equals("float")){
                        method = object.getClass().getMethod("set" + firstLetter + Letter,float.class); // 反射指定名称的方法
                        method.invoke(object,Float.parseFloat(values));
                    }
                }
            }
        }
        System.out.println(object);
        return object;
    }
}
